using Arrowgene.Ddon.GameServer.Characters;
using Arrowgene.Ddon.Server;
using Arrowgene.Ddon.Server.Network;
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
using Arrowgene.Ddon.Shared.Entity.Structure;
using Arrowgene.Ddon.Shared.Model;
using Arrowgene.Ddon.Shared.Network;
using Arrowgene.Logging;
using Arrowgene.Networking.Tcp.Consumer.BlockingQueueConsumption;
using System;
using System.Collections.Generic;
using System.Linq;

namespace Arrowgene.Ddon.GameServer.Handler
{
    public class QuestPlayStartHandler : GameRequestPacketHandler<C2SQuestPlayerStartReq, S2CQuestPlayerStartRes>
    {
        private static readonly ServerLogger Logger = LogProvider.Logger<ServerLogger>(typeof(QuestPlayStartHandler));

        public QuestPlayStartHandler(DdonGameServer server) : base(server)
        {
        }

        public override S2CQuestPlayerStartRes Handle(GameClient client, C2SQuestPlayerStartReq request)
        {
            var quest = QuestManager.GetQuest(request.QuestScheduleId);
            if (quest != null)
            {
                client.Party.QuestState.AddNewQuest(quest);
                var ntc = new S2CQuestTimeGainQuestPlayStartNtc()
                {
                    TimeGainQuestPlayStartData = quest.ToCDataContentsPlayStartData()
                };
                // These next values come from rEndContentsSortieInfo.esi.json
                ntc.TimeGainQuestPlayStartData.QuestPhaseGroupIdList = quest.MissionParams.QuestPhaseGroupIdList;
                client.Party.SendToAll(ntc);
                // TODO: Handle swapping/restricting items?
            }

            return new S2CQuestPlayerStartRes();
        }

        private static readonly byte[] pcap1_data = new byte[] { 0x00, 0x00, 0x01, 0xEB, 0x00, 0x04, 0xD1, 0x04, 0x03, 0x01, 0x0B, 0x08, 0x00, 0x00, 0x00, 0x64, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xB3, 0x00, 0x00, 0x0C, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x7C, 0x00, 0x00, 0x21, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0C, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x09, 0x00, 0x00, 0x14, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x00, 0x00, 0x14, 0xD6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x14, 0xC1, 0x04, 0x2C, 0xA2, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x00, 0x00, 0x14, 0xD6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x14, 0xC1, 0x04, 0x2C, 0xA2, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x01, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x01, 0x00, 0x00, 0x01, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x01, 0x00, 0x00, 0x01, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x01, 0x00, 0x00, 0x01, 0x91, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x21, 0xE0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0C, 0x26, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x21, 0xE1, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0C, 0x26, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x21, 0xE2, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0C, 0x26, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
        private static readonly byte[] pcap2_data = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x44, 0x00, 0x0D, 0x00, 0x06, 0x00, 0x1B, 0xE3, 0x81, 0x95, 0xE3, 0x81, 0x95, 0xE3, 0x81, 0x84, 0xE3, 0x81, 0xAA, 0xE7, 0x95, 0xB0, 0xE5, 0xA4, 0x89, 0xE3, 0x81, 0x8C, 0xE7, 0x99, 0xBA, 0xE7, 0x94, 0x9F, 0x44, 0x00, 0x0D, 0x00, 0x08, 0x00, 0x1B, 0xE3, 0x81, 0x95, 0xE3, 0x81, 0x95, 0xE3, 0x81, 0x84, 0xE3, 0x81, 0xAA, 0xE7, 0x95, 0xB0, 0xE5, 0xA4, 0x89, 0xE3, 0x81, 0x8C, 0xE7, 0x99, 0xBA, 0xE7, 0x94, 0x9F, 0x3F, 0x00, 0x03, 0x00, 0x02, 0x00, 0x1B, 0xE3, 0x81, 0x95, 0xE3, 0x81, 0x95, 0xE3, 0x81, 0x84, 0xE3, 0x81, 0xAA, 0xE7, 0x95, 0xB0, 0xE5, 0xA4, 0x89, 0xE3, 0x81, 0x8C, 0xE7, 0x99, 0xBA, 0xE7, 0x94, 0x9F, 0x44, 0x00, 0x0D, 0x00, 0x05, 0x00, 0x1B, 0xE3, 0x81, 0x95, 0xE3, 0x81, 0x95, 0xE3, 0x81, 0x84, 0xE3, 0x81, 0xAA, 0xE7, 0x95, 0xB0, 0xE5, 0xA4, 0x89, 0xE3, 0x81, 0x8C, 0xE7, 0x99, 0xBA, 0xE7, 0x94, 0x9F, 0x38, 0x16, 0x20, 0x00, 0x00, 0x00, 0x08, 0xE7, 0x00 };
    }
}
